# System Installation # Obtain the Image The **system image** for the **Quectel Pi M1/L1** smart main control board can be obtained from the [**Quectel Developer Website**](). Click **“Quectel Pi”** in the product category navigation bar to find and download the required image. If you have any questions, please contact technical support. ```{image} images/image_S4wnbQH2SouwAxxaQGdcd3gLnXg.webp :width: 1488px :height: 879px :align: center ``` Before flashing the **Quectel Pi** smart main control board image, make sure that the **Qualcomm_USB_Driver_v1.0.10065.1** driver is installed. If it has not been installed, [click here to download and install it](). # Flash the Image (QDL) ## Disable ModemManager - **Prerequisite:** If your Linux distribution uses **systemd**, it may include the **ModemManager** tool, which is used to configure mobile broadband devices. When the device is connected via USB, it may be recognized as a Qualcomm modem, causing ModemManager to attempt to configure it and interfere with the QDL flashing process. Therefore, ModemManager must be disabled before connecting the device. Run the following command to stop ModemManager: ```plaintext sudo systemctl stop ModemManager ``` ## Download the QDL Tool **Linux x64 Click the link to download:** https://www.quectel.com.cn/wp-content/uploads/2026/03/Quectel_Pi_H1_QDL_Linux_x64%E7%83%A7%E5%86%99%E5%9B%BA%E4%BB%B6%E5%B7%A5%E5%85%B7.zip **Windows x64 Click the link to download:** https://www.quectel.com.cn/wp-content/uploads/2026/03/Quectel_Pi_H1_QDL_Win_x64%E7%83%A7%E5%86%99%E5%9B%BA%E4%BB%B6%E5%B7%A5%E5%85%B7.zip ## Enter EDL Mode Switch the **Quectel Pi M1** to download mode. Power off the board, turn **DIP switch No. 2** to the **ON** position, and then power on the board. The module will enter **EDL (Emergency Download) mode**. If automatic power-on is not enabled, press the **PWRKEY** button to power on the module. ```{image} images/image_Xd2HbWRFWoSl8kxUPtMcN1ZPnRN.webp :width: 1278px :height: 807px :align: center ``` ## Linux x64 1. Extract the **QDL_Linux_x64** package. Open a terminal window in the directory containing the firmware files, rawprogram_unsparse0.xml, patch0.xml, and the QDL binary file. 2. Run the QDL executable in the **QDL_Linux_x64** directory using the following command to flash the software: ```plaintext ./qdl --storage emmc prog_firehose_ddr.elf rawprogram_unsparse0.xml patch0.xml ``` **Note:** If the rawprogram_unsparse0.xml file contains entries with the erase tag, they must be removed. This tag is used to ensure that the partition area is erased, but the QDL tool does not support it. Keeping the tag will cause an error. 3. If **"partition 0 is now bootable"** is displayed in the terminal window, the flashing process has completed successfully, as shown in the figure below: ```{image} images/image_X2UmbAueFoN72IxeHPEcwli3n6c.webp :width: 1920px :height: 972px ``` 4. After the flashing process is completed successfully, run the lsusb command. The device information will be displayed in the terminal window, as shown in the figure below: ```{image} images/image_J7MLb8Qdtoqm9TxaGYtct2IGngk.webp :width: 628px :height: 234px ``` ## Windows x64 1. Convert the device driver to the **WinUSB** driver. 2. After installing the **Qualcomm_USB_Driver_v1.0.10065.1** driver, the device driver must be converted to **WinUSB**. - Click the [**Zadig**]() website to download the tool for converting the driver to WinUSB. After downloading, run the tool as an administrator. Power on the main control board and make sure it enters **EDL (Emergency Download) mode**. In Zadig, click **“Options” → “List All Devices”**, find **“QUS_BULK_CID:041C_SN:3D2E305E”** from the drop-down list, select **“WinUSB”** on the right, and then click **“Replace Driver”** to complete the driver conversion. The detailed steps are shown in the figure below. ```{image} images/image_Re0VbGogXoW89YxGlZKct9aCnAf.webp :width: 568px :height: 249px ```
Driver Conversion Step 1
```{image} images/image_Gur5bZiYDodzDQxmzvMc9IZpnGd.webp :width: 566px :height: 246px ```
Driver Conversion Step 2
3. Extract the **QDL_Win_x64** package, and place the firmware files, rawprogram_unsparse0.xml, patch0.xml, and the QDL executable file in the same folder. 4. Open a **CMD** window and run the QDL executable in the **QDL_Win_x64** directory using the following command: ```plaintext QDL_Win_x64>QDL.exe prog_firehose_ddr.elf rawprogram_unsparse0.xml patch0.xml ``` **Note:** If the rawprogram_unsparse0.xml file contains entries with the erase tag, they must be removed. This tag is used to ensure that the partition area is erased, but the QDL tool does not support it. Keeping the tag will cause an error. ```{image} images/image_Vm2SbJc5CozQhfx0CsBc61eUn0d.webp :width: 1017px :height: 327px ``` The flashing process is completed successfully, as shown in the figure below: ```{image} images/image_J2W0bhIM7oB5wtxdglvcceZEn6c.webp :width: 728px :height: 459px :align: center ``` ## Notes If the flashing process fails, perform the following steps and retry: 1. Power off the device. 2. Disconnect the **Quectel Pi M1**. 3. Restart the **Quectel Pi M1**. 4. For **Windows**, it is recommended to use **QFIL** for flashing. # Flash the Image (QFIL) **QFIL (Qualcomm Flash Image Loader)** is an official firmware flashing tool developed by **Qualcomm**. It is mainly used for smartphones, tablets, and other embedded devices based on Qualcomm chipsets. Its core function is to flash or write firmware files, such as the **Bootloader, Recovery, and kernel**, to the device via a USB connection. - **Note:** Do not select **“Erase All Before Download”** in the configuration. ```{image} images/image_UY5PbCmTKoHtP8xtsk6cyCHQnue.webp :width: 800px :height: 599px ``` 1. Click **“Configuration”**, then click **“FireHose Configuration”** in the pop-up menu. Select the **“Reset After Download”** checkbox, and then click **“OK”**. ```{image} images/image_X1MhbgmKgoYTVrxKa9DcDpCynKf.webp :width: 800px :height: 599px ``` ```{image} images/image_VcYpb5pmZoKgz4x2b7ycHEwjn3b.webp :width: 748px :height: 361px ``` 2. Select **“Flat Build”** as the build type, and select **“emmc”** as the storage type in the lower-right corner. ```{image} images/image_JETZbXJkZovrYDxr2KNcwZh7ndg.webp :width: 800px :height: 599px ``` 3. Press and hold the **power button** on the **Quectel Pi M1**, power on the device, click the **“Select Port”** button, select the **“9008”** port, and then click **“OK”**. ```{image} images/image_MJXfb2F39owA9bxHMPEcLZjXnBe.webp :width: 796px :height: 596px ``` 4. Click the **“Browse”** button and select the **“prog_firehose_ddr.elf”** file. ```{image} images/image_GnJsbwTWLoXjDtxwZuAcShtnnjg.webp :width: 800px :height: 599px ``` 5. Click the **“Load XML”** button and select all **“rawprogram0.xml”** files and **“patch0.xml”** files. ```{image} images/image_MxH7bOiSzoYm7wxyEPMcUNAunIe.webp :width: 800px :height: 599px ``` 6. Click the **“Download”** button. When **“Download Succeed”** appears in the **Status** box, the flashing process has completed successfully. Power off the device, restore **Boot1** to its original position, and then power on the device again to boot the system. ```{image} images/image_G1MPbbegtogTTQxAI37cN4Qdnpe.webp :width: 800px :height: 599px ```